/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pl.tewi.utils;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

/**
 * Klasa uzytkowa operująca na adnotacjach 
 * @author Marcin Kwapisz
 */
public class AnnotationUtils {

    /**
     * Tworzy listę pól klasy opatrzonych zadaną adnotacją. Jeżeli żadne pole nie
     * ma takiej adnotacji to zwracana jest pusta kolekcja
     * @param klass klasa której pola zostaną zeskanowane w poszukiwaniu zadanej adnotacji
     * @param annotation typ poszukiwanej adnotacji
     * @return kolekcja pól opatrzonych zadaną adnotacją
     */
    public static List<Field> getAnnotatedFileds(Class klass, Class annotation) {
        ArrayList<Field> retFields = new ArrayList<Field>();
        Field[] declaredFields = klass.getDeclaredFields();
        for (int i = 0; i < declaredFields.length; i++) {
            if (declaredFields[i].isAnnotationPresent(annotation)) {
                if (!declaredFields[i].isAccessible()) {
                    declaredFields[i].setAccessible(true);
                }
                retFields.add(declaredFields[i]);
            }
        }
        return retFields;
    }
}
